#ifndef FUNDAMENTAL_RTTI_H_
#define FUNDAMENTAL_RTTI_H_

// DECLARE_RTTI
#define DECLARE_RTTI( className, parentClassName ) \
public : \
	static const Fundamental::RTTI&		GetTypeInfo() \
	{ \
		return className##::_rtti; \
	} \
	virtual const Fundamental::RTTI&	GetRTTI() \
	{ \
		return this->_rtti; \
	} \
private : \
	static const Fundamental::RTTI	_rtti; \


// IMPLEMENT_RTTI
#define IMPLEMENT_RTTI( className, parentClassName ) \
const Fundamental::RTTI className##::_rtti = \
{ \
	#className, \
	Fundamental::JenkinsPHF( #className ), \
	const_cast< Fundamental::RTTI* >( &parentClassName##::GetTypeInfo() ) \
}; \


namespace Fundamental
{

#ifndef FUNDAMENTAL_ID_
#define FUNDAMENTAL_ID_
	typedef unsigned int	ID;
#endif

	struct RTTI
	{
		std::string		name;
		ID				id;
		RTTI*			parent;
	};

};

#endif